public class Building {
    private String name; // 建筑名称（如“教学楼A”）

    // 构造方法：独立初始化，不依赖College
    public Building(String name) {
        this.name = name;
    }

    // getter方法
    public String getName() {
        return name;
    }}



public class Course {
    private String name;      // 课程名称
    private Building location; // 课程所在建筑（约束：必须非空）
    private College college;  // 所属学院（组合关系：依赖College存在）

    // 构造方法：私有，只能通过College的createCourse方法创建（保证组合关系）
    private Course(String name, Building location, College college) {
        // 约束检查：课程必须在某个建筑中进行（location不能为null）
        if (location == null) {
            throw new IllegalArgumentException("Course must be held in a Building");
        }
        // 约束检查：课程必须属于某个学院（college不能为null）
        if (college == null) {
            throw new IllegalArgumentException("Course must belong to a College");
        }
        this.name = name;
        this.location = location;
        this.college = college;
    }

    // 仅College能创建Course实例（通过内部调用私有构造）
    public static Course createCourse(String name, Building location, College college) {
        return new Course(name, location, college);
    }

    // getter方法
    public String getName() {
        return name;
    }

    public Building getLocation() {
        return location;
    }

    public College getCollege() {
        return college;
    }}



import java.util.ArrayList;import java.util.List;
public class College {
    private String name;
    // 聚合关系：学院包含建筑（Building可独立存在）
    private List<Building> buildings = new ArrayList<>();
    // 组合关系：学院包含课程（Course依赖学院存在）
    private List<Course> courses = new ArrayList<>();

    public College(String name) {
        this.name = name;
    }

    // 聚合关系：添加建筑（建筑可预先创建，再加入学院）
    public void addBuilding(Building building) {
        if (building != null && !buildings.contains(building)) {
            buildings.add(building);
        }
    }

    // 聚合关系：移除建筑（建筑移除后仍可存在）
    public void removeBuilding(Building building) {
        buildings.remove(building);
    }

    // 组合关系：创建并添加课程（Course必须通过学院创建，保证生命周期依赖）
    public Course createCourse(String courseName, Building location) {
        // 检查建筑是否属于当前学院（可选约束：课程所在建筑必须是学院的建筑）
        if (!buildings.contains(location)) {
            throw new IllegalArgumentException("Course location must be a building of this college");
        }
        Course course = Course.createCourse(courseName, location, this);
        courses.add(course);
        return course;
    }

    // 组合关系：移除课程（从学院中移除即销毁课程关联）
    public void removeCourse(Course course) {
        if (course != null && course.getCollege() == this) { // 确保课程属于当前学院
            courses.remove(course);
        }
    }

    // 销毁学院时清理所有课程（体现组合的生命周期依赖）
    public void destroy() {
        courses.clear(); // 课程随学院销毁而失效
        // 建筑无需清理（聚合关系：建筑可独立存在）
    }

    // getter方法
    public String getName() {
        return name;
    }

    public List<Building> getBuildings() {
        return new ArrayList<>(buildings); // 返回副本，避免外部直接修改
    }

    public List<Course> getCourses() {
        return new ArrayList<>(courses); // 返回副本，避免外部直接修改
    }}